/*
 * @(#)XfdmAlgorithm.java        1.0 2000/05/09
 *
 * This file is part of Xfuzzy 3.0, a design environment for fuzzy logic
 * based systems.
 *
 * (c) 2000 IMSE-CNM. The authors may be contacted by the email address:
 *                    xfuzzy-team@imse.cnm.es
 *
 * Xfuzzy is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License as published by
 * the Free Software Foundation.
 *
 * Xfuzzy is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * for more details.
 */

package xfuzzy.xfdm.model;

import xfuzzy.lang.*;

/**
 * Clase abstracta que describe un algoritmo de extracci�n de reglas
 * 
 * @author Francisco Jos� Moreno Velo
 *
 */
public abstract class XfdmAlgorithm {

	//----------------------------------------------------------------------------//
	//                            M�TODOS ABSTRACTOS                              //
	//----------------------------------------------------------------------------//

	/**
	 * Indica si el algoritmo necesita que las variables de entrada tengan creadas
	 * las funciones de pertenencia. En caso contrario el algoritmo debe encargarse
	 * de dar contenido a los tipos de las variables de entrada.
	 */
	public abstract boolean needInputMemFuncs();
	
	/**
	 * Indica si el algoritmo necesita que las variables de salida tengan creadas
	 * las funciones de pertenencia. En caso contrario el algoritmo debe encargarse
	 * de dar contenido a los tipos de las variables de salida.
	 */
	public abstract boolean needOutputMemFuncs();

	/**
	 * Indica si el algoritmo necesita que la estructura del sistema est� creada.
	 * Este requisito es propio de los algoritmo que contienen alguna etapa de
	 * optimizaci�n param�trica.
	 * @return
	 */
	public abstract boolean needSystemStructure();
	
	/**
	 * Indica si el algoritmo es v�lido para problemas de clasificaci�n
	 * @return
	 */
	public abstract boolean supportsClassification();
	
	/**
	 * Indica si el algoritmo es v�lido para problemas de regresi�n
	 * @return
	 */
	public abstract boolean supportsRegression();
	
	/**
	 * Obtiene el tipo de base de conocimiento que genera el algoritmo
	 */
	public abstract int getKnowledgeBaseKind();
	
	/**
	 * Genera el contenido de la base de conocimiento a partir de los datos
	 */
	public abstract void extractKnowlegde(KnowledgeBase base, XfdmConfig config );

	/**
	 * Representaci�n en el fichero de configuracion
	 */
	public abstract String toXML();

}


